2024年10月蓝桥杯蓝桥C++(STEMA)中/高级
STEMA
2024
2025-06-09 11:43:00
90次
一、单选题
下面的函数要实现的功能是删除单向链表中所有值为 value 的节点,请问横线处应该填写( )。
struct Node
{
int val;
Node *nxt;
};
Node* DeleteNode(Node *head, int value)
{
Node *cur, node;
node.nxt = head;
cur = &node;
while(cur->nxt != NULL)
{
_____________________
else
cur = cur->nxt;
}
return node.nxt;
} | A. if(cur->val == value) cur->nxt = cur->nxt->nxt; |
B. if(cur->val == value) node.nxt = cur->nxt; |
| C. if(cur->nxt->val == value) node.nxt = cur->nxt; |
D. if(cur->nxt->val == value) cur->nxt = cur->nxt->nxt; |
【知识点】 蓝桥杯C++中/高级
二、编程题
表达式求值
题目描述:
给定一个仅包含数字 1 到 9 的字符串 S,请在 S 中分别插入 1 个加号(+)、2 个加号。
注:
1)加号不能出现在 S 中第一位数字的前面或者最后一位数字的后面;
2)两个加号的位置不能相邻。
插入加号后的字符串可以看做是一个加法表达式,请找出所有可能出现的表达式,并输出所有表达式结果的总和。
例 1:S = "1234";分别在字符串 "1234" 中插入 1 个加号、2 个加号,插入加号的表达式如下:
1)当插入 1 个加号时,表达式有 1 + 234、12 + 34、123 + 4,计算结果依次为 235、46、127;
2)当插入 2 个加号时,表达式有 1 + 2 + 34、1 + 23 + 4、12 + 3 + 4,计算结果依次为 37、28、19;
这些结果的总和为 492(235 + 46 + 127 + 37 + 28 + 19)。
例 2:S = "111",分别在字符串 "111" 中插入 1 个加号、2 个加号,插入加号的表达式如下:
1)当插入 1 个加号时,表达式有 1 + 11,11 + 1,计算结果依次为 12、12;
2)当插入 2 个加号时,表达式有 1 + 1 + 1,计算结果为 3;
这些结果的总和为 27(12 + 12 + 3)。
输入描述:
输入一个仅包含数字 1 到 9 的字符串 S(3≤S的长度≤15)。
输出描述:
输出一个整数,表示所有可能出现的表达式的结果的总和。
样例输入:
1234
样例输出:
492
【知识点】 蓝桥杯C++中/高级
不变序列
题目描述:
给定包含 n 个整数的序列,如果序列中出现了连续 k 个及以上的位置元素都相等,则称这些位置的元素组成的序列为不变序列。
请注意,对于同一段连续相等的元素,只统计最长的序列,而不重复计数其子序列。
如:序列 [6,4,4,4,4],只统计 [4,4,4,4],不用再统计其子序列,如 [4,4,4]。
请统计给定的序列中有多少个不变序列,并输出其中最长不变序列的长度。
例如:n = 10,k = 3;序列为 [1,3,2,2,2,6,4,4,4,4],其中不变序列有 2 个,分别是[2,2,2] 和 [4,4,4,4],其中最长不变序列的长度为 4。
输入描述:
第一行输入两个整数 n 和 k(1≤n≤300,2≤k≤n),整数之间以一个空格隔开;
第二行输入 n 个整数 ai(1≤ai≤1000,1≤i≤n),表示给定的序列,整数之间以一个空格隔开。
输入数据保证给定的序列中一定存在不变序列。
输出描述:
一行,输出两个整数,分别表示给定序列中不变序列的数量以及最长不变序列的长度,整数之间以一个空格隔开。
样例输入:
10 3 1 3 2 2 2 6 4 4 4 4
样例输出:
2 4
【知识点】 蓝桥杯C++中/高级
岩石样本存储
题目描述:
小雷驾驶着飞船登陆了开普勒-22b星球,他采集了 N 块直径相同的圆柱体岩石样本,编号为 1 到 N。飞船上有 M 个从左到右整齐排列的样本储存筒,其直径与岩石样本相同,且储存筒的高度可任意调节(如果某个储存筒的高度发生变化,其余储存筒也变为相同的高度),使每个岩石样本都能够完整存入储存筒中。
现要将 N 块岩石样本按照编号从小到大依次放入储存筒,存放规则如下:
1)1 号岩石样本必须放在左边第一个储存筒中;
2)i 号(2≤i≤N)岩石样本可以选择叠放在 i-1 号岩石样本所在的储存筒中,但是必须使用厚度为 1 的保护垫将两块岩石样本隔开;也可以放在左侧第一个空的储存筒中。
请问按照上述规则存放岩石样本,如何才能使储存筒的高度最小?请计算这个最小高度。
例如:N = 5,M = 3,1 到 5 号岩石样本的高度依次为 5,20,15,13,13,按照下图所示存入岩石样本可使得储存筒的高度最小,为 27。

输入描述:
第一行输入两个整数 N、M(1≤M≤N≤105),分别表示岩石样本的数量和样本储存筒的数量,整数间以一个空格隔开;
第二行输入 N 个整数 Pi(1≤Pi≤109,1≤i≤N),表示第 i 号岩石样本的高度,整数间以一个空格隔开。
输出描述:
输出一个整数,表示样本储存筒的最小高度。
样例输入:
5 3 5 20 15 13 13
样例输出:
27
【知识点】 蓝桥杯C++中/高级
